// index/pages/freeQuizzes/freeQuizzes.js
const { http } = require('../../../utils/http.js');
const { getCurrentUser } = require('../../../utils/userManager.js');

// 获取用户ID的辅助函数
function getUserId() {
  const user = getCurrentUser();
  return user?.userInfo?.userId || null;
}
Page({
  navigateToQuestionBank() {
    wx.navigateTo({
      url: '/index/pages/questionBank/questionBank',
      // 跳转失败时的回调
      fail: (err) => {
        console.error('跳转失败:', err)
        wx.showToast({
          title: '跳转失败',
          icon: 'none',
          duration: 2000
        })
      }
    })
  },
  /**
   * 页面的初始数据
   */
  data: {
    // 页面标题
    pageTitle: '生物化学',
    subjectId: 0,
    
    // 筛选标签数据
    filterTabs: [
      { id: 'comprehensive', name: '综合', active: true },
      { id: 'sales', name: '销量', active: false },
      { id: 'newest', name: '最新', active: false },
      { id: 'price', name: '价格', active: false }
    ],
    
    // 题库列表数据
    questionBankList: [
      {
        id: 1,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs01.jpg',
        learnCount: 6873,
        viewCount: 108732,
        currentPrice: 19.00,
        originalPrice: 100.00,
        isHot: true,
        hotText: '题库组合'
      },
      {
        id: 2,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs02.jpg',
        learnCount: 5432,
        viewCount: 87654,
        currentPrice: 25.00,
        originalPrice: 120.00,
        isHot: false
      },
      {
        id: 3,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs03.jpg',
        learnCount: 4321,
        viewCount: 65432,
        currentPrice: 30.00,
        originalPrice: 150.00,
        isHot: false
      },
      {
        id: 4,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs05.jpg',
        learnCount: 3456,
        viewCount: 54321,
        currentPrice: 22.00,
        originalPrice: 110.00,
        isHot: false
      },
      {
        id: 5,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs01.jpg',
        learnCount: 2987,
        viewCount: 43210,
        currentPrice: 28.00,
        originalPrice: 140.00,
        isHot: false
      },
      {
        id: 6,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs02.jpg',
        learnCount: 2345,
        viewCount: 32109,
        currentPrice: 35.00,
        originalPrice: 180.00,
        isHot: false
      }
    ],
    
    // 当前选中的筛选标签
    currentFilter: 'comprehensive',
    
    // 排序方向状态
    sortDirection: 'desc' // 'asc' 或 'desc'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    console.log('题库展示页面加载', options);
    
    // 保存传入的参数
    this.setData({
      subjectId: options.subjectId || 1,
      type: options.type || 'OFFICIAL',
      pageTitle: options.pageTitle || '题库'
    });
    
    // 根据题库类型设置不同的筛选标签
    this.setFilterTabsByType(options.type);
    
    // 初始化数据
    this.initPageData();
  },

  /**
   * 根据题库类型设置筛选标签
   */
  setFilterTabsByType(type) {
    let filterTabs = [];
    
    switch(type) {
      case 'OFFICIAL':
        // 章节练习 - 按综合、热门、价格、浏览筛选
        filterTabs = [
          { id: 'comprehensive', name: '综合', active: true },
          { id: 'hot', name: '热门', active: false },
          { id: 'price', name: '价格', active: false },
          { id: 'viewCount', name: '浏览', active: false }
        ];
        break;
      case 'CUSTOM':
        // 模拟考试 - 按难度、时长、题型筛选
        filterTabs = [
          { id: 'difficulty', name: '难度', active: true },
          { id: 'duration', name: '时长', active: false },
          { id: 'questionType', name: '题型', active: false },
          { id: 'popularity', name: '热度', active: false }
        ];
        break;
      case 'EXCLUSIVE':
        // 历年真题 - 按年份、地区、科目筛选
        filterTabs = [
          { id: 'year', name: '年份', active: true },
          { id: 'region', name: '地区', active: false },
          { id: 'subject', name: '科目', active: false },
          { id: 'difficulty', name: '难度', active: false }
        ];
        break;
      default:
        filterTabs = [
          { id: 'comprehensive', name: '综合', active: true },
          { id: 'hot', name: '热门', active: false },
          { id: 'price', name: '价格', active: false },
          { id: 'viewCount', name: '浏览', active: false }
        ];
    }
    
    this.setData({
      filterTabs: filterTabs,
      currentFilter: filterTabs[0].id
    });
  },

  /**
   * 初始化页面数据
   */
  initPageData() {
    const { subjectId, type } = this.data;
    
    if (!subjectId) {
      wx.showToast({
        title: '请先选择科目',
        icon: 'none',
        duration: 2000
      });
      return;
    }
    
    // 显示加载状态
    wx.showLoading({
      title: '加载中...',
      mask: true
    });
    
    // 先尝试调用API获取题库列表数据
    // 如果API失败，会自动降级到静态数据
    this.getQuestionBankList(subjectId, type);
  },

  /**
   * 获取题库列表
   */
  getQuestionBankList(subjectId, type) {
    // 构建请求参数 - 使用新的API接口
    const params = {
      subjectId: subjectId,
      type: type,  // 题库类型：OFFICIAL、CUSTOM、EXCLUSIVE
      del: 1  // 只查询未删除的题库
    };
    
    console.log('请求题库列表参数:', params);
    console.log('http工具:', http);
    console.log('API路径:', '/fk/question_bank/list');
    
    // 先尝试使用降级数据，确保页面能正常显示
    if (!http || typeof http.get !== 'function') {
      console.error('http工具未正确引入，使用降级数据');
      this.useFallbackData();
      return;
    }
    
    http.get('/fk/question_bank/list', params)
      .then(res => {
        console.log('获取题库列表成功:', res);
        wx.hideLoading();
        
        if (res && res.rows && res.rows.length > 0) {
          // 处理返回的数据，转换为页面需要的格式
          const questionBankList = res.rows.map((item, index) => ({
            id: item.id,
            title: item.name || '题库标题',
            image: item.url,
            learnCount: item.learnCount || item.studyCount || 1000 + index * 500,
            viewCount: item.viewCount || 5000 + index * 1000,
            currentPrice: item.currentPrice || item.price || 20 + index * 5,
            originalPrice: item.originalPrice || item.oldPrice || 100 + index * 10,
            isHot: item.isHot || index === 0,
            hotText: this.getHotTextByType(type, item),
            description: item.description || '',
            createTime: item.createTime || '',
            updateTime: item.updateTime || '',
            subjectName: item.subjectName || '',
            type: item.type || type,
            // 根据类型添加特定字段
            ...this.getTypeSpecificFields(type, item)
          }));
          
          this.setData({
            questionBankList: questionBankList
          });
        } else {
          // 没有数据时显示空状态
          this.setData({
            questionBankList: []
          });
          
          wx.showToast({
            title: '暂无题库数据',
            icon: 'none',
            duration: 2000
          });
        }
      })
      .catch(err => {
        console.error('获取题库列表失败:', err);
        wx.hideLoading();
        
        // API调用失败时，使用降级数据确保页面能正常显示
        console.log('API调用失败，使用降级数据');
        this.useFallbackData();
        
        // 显示提示信息
        wx.showToast({
          title: '使用本地数据',
          icon: 'none',
          duration: 1500
        });
      });
  },

  /**
   * 根据题库类型获取热门标签文本
   */
  getHotTextByType(type, item) {
    switch(type) {
      case 'OFFICIAL':
        return item.hotText || '章节练习';
      case 'CUSTOM':
        return item.hotText || '模拟考试';
      case 'EXCLUSIVE':
        return item.hotText || '历年真题';
      default:
        return item.hotText || '热门';
    }
  },

  /**
   * 根据题库类型获取特定字段
   */
  getTypeSpecificFields(type, item) {
    switch(type) {
      case 'OFFICIAL':
        return {
          chapterCount: item.chapterCount || 0,
          questionCount: item.questionCount || 0,
          difficulty: item.difficulty || '中等'
        };
      case 'CUSTOM':
        return {
          duration: item.duration || '120分钟',
          questionCount: item.questionCount || 0,
          difficulty: item.difficulty || '中等',
          examType: item.examType || '模拟考试'
        };
      case 'EXCLUSIVE':
        return {
          year: item.year || '2024',
          region: item.region || '全国',
          examType: item.examType || '真题',
          questionCount: item.questionCount || 0
        };
      default:
        return {};
    }
  },

  /**
   * 使用降级数据
   */
  useFallbackData() {
    console.log('使用降级数据');
    // 保持原有的默认数据
    const fallbackData = [
      {
        id: 1,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs01.jpg',
        learnCount: 6873,
        viewCount: 108732,
        currentPrice: 19.00,
        originalPrice: 100.00,
        isHot: true,
        hotText: '题库组合'
      },
      {
        id: 2,
        title: '生物化学考研题库 生物化学考研题库',
        image: '/images/zxs02.jpg',
        learnCount: 5432,
        viewCount: 87654,
        currentPrice: 25.00,
        originalPrice: 120.00,
        isHot: false
      }
    ];
    
    this.setData({
      questionBankList: fallbackData
    });
  },

  /**
   * 筛选标签点击事件
   */
  onFilterTabClick(e) {
    const { id } = e.currentTarget.dataset;
    console.log('点击筛选标签:', id);
    
    // 更新筛选标签状态
    const filterTabs = this.data.filterTabs.map(tab => ({
      ...tab,
      active: tab.id === id
    }));
    
    this.setData({
      filterTabs,
      currentFilter: id
    });
    
    // 如果当前有数据，直接进行本地排序
    if (this.data.questionBankList && this.data.questionBankList.length > 0) {
      this.sortQuestionBankList(id);
    } else {
      // 如果没有数据，重新获取数据
      this.getQuestionBankListWithFilter(id);
    }
  },

  /**
   * 筛选标签长按事件 - 切换排序方向
   */
  onFilterTabLongPress(e) {
    const { id } = e.currentTarget.dataset;
    const currentDirection = this.data.sortDirection;
    const newDirection = currentDirection === 'desc' ? 'asc' : 'desc';
    
    console.log('长按筛选标签:', id, '切换排序方向:', currentDirection, '->', newDirection);
    
    this.setData({
      sortDirection: newDirection
    });
    
    // 重新排序
    if (this.data.questionBankList && this.data.questionBankList.length > 0) {
      this.sortQuestionBankList(id);
    }
    
    // 显示提示
    wx.showToast({
      title: `排序方向: ${newDirection === 'desc' ? '降序' : '升序'}`,
      icon: 'none',
      duration: 1500
    });
  },

  /**
   * 根据筛选条件获取题库列表
   */
  getQuestionBankListWithFilter(sortType) {
    const { subjectId, type } = this.data;
    
    if (!subjectId) {
      wx.showToast({
        title: '请先选择科目',
        icon: 'none',
        duration: 2000
      });
      return;
    }
    
    // 显示加载状态
    wx.showLoading({
      title: '加载中...',
      mask: true
    });
    
    // 构建请求参数
    const params = {
      subjectId: subjectId,
      type: type,  // 题库类型
      del: 1,      // 只查询未删除的题库
      // 排序参数（如果后端支持）
      orderBy: this.getOrderByField(sortType, type)
    };
    
    console.log('筛选请求参数:', params);
    
    // 检查http工具是否可用
    if (!http || typeof http.get !== 'function') {
      console.error('http工具未正确引入，使用降级数据');
      this.useFallbackData();
      wx.hideLoading();
      return;
    }
    
    http.get('/fk/question_bank/list', params)
      .then(res => {
        console.log('筛选获取题库列表成功:', res);
        wx.hideLoading();
        
        if (res && res.rows && res.rows.length > 0) {
          // 处理返回的数据
          const questionBankList = res.rows.map((item, index) => ({
            id: item.id,
            title: item.name || '题库标题',
            image: item.url,
            learnCount: item.learnCount || item.studyCount || 1000 + index * 500,
            viewCount: item.viewCount || 5000 + index * 1000,
            currentPrice: item.currentPrice || item.price || 20 + index * 5,
            originalPrice: item.originalPrice || item.oldPrice || 100 + index * 10,
            isHot: item.isHot || index === 0,
            hotText: this.getHotTextByType(type, item),
            description: item.description || '',
            createTime: item.createTime || '',
            updateTime: item.updateTime || '',
            subjectName: item.subjectName || '',
            type: item.type || type,
            // 根据类型添加特定字段
            ...this.getTypeSpecificFields(type, item)
          }));
          
          this.setData({
            questionBankList: questionBankList
          });
        } else {
          // 没有数据时显示空状态
          this.setData({
            questionBankList: []
          });
          
          wx.showToast({
            title: '暂无相关题库',
            icon: 'none',
            duration: 2000
          });
        }
      })
      .catch(err => {
        console.error('筛选获取题库列表失败:', err);
        wx.hideLoading();
        
        // API调用失败时，使用降级数据确保页面能正常显示
        console.log('筛选API调用失败，使用降级数据');
        this.useFallbackData();
        
        // 显示提示信息
        wx.showToast({
          title: '使用本地数据',
          icon: 'none',
          duration: 1500
        });
      });
  },

  /**
   * 根据筛选类型和题库类型获取排序字段
   */
  getOrderByField(sortType, questionBankType) {
    switch(questionBankType) {
      case 'OFFICIAL':
        // 章节练习的排序
        switch(sortType) {
          case 'comprehensive': return 'createTime'; // 综合排序
          case 'price': return 'currentPrice';      // 价格排序
          case 'viewCount': return 'viewCount';     // 浏览量排序
          case 'hot': return 'learnCount';          // 热门排序
          default: return 'createTime';
        }
        break;
      case 'CUSTOM':
        // 模拟考试的排序
        switch(sortType) {
          case 'difficulty': return 'difficulty';   // 难度排序
          case 'duration': return 'duration';       // 时长排序
          case 'questionType': return 'questionType'; // 题型排序
          case 'popularity': return 'learnCount';   // 热度排序
          default: return 'difficulty';
        }
        break;
      case 'EXCLUSIVE':
        // 历年真题的排序
        switch(sortType) {
          case 'year': return 'year';               // 年份排序
          case 'region': return 'region';           // 地区排序
          case 'subject': return 'subjectName';     // 科目排序
          case 'difficulty': return 'difficulty';   // 难度排序
          default: return 'year';
        }
        break;
      default:
        return 'createTime';
    }
  },

  /**
   * 根据筛选条件排序题库列表
   */
  sortQuestionBankList(sortType) {
    let sortedList = [...this.data.questionBankList];
    const direction = this.data.sortDirection;
    
    switch (sortType) {
      case 'price':
        // 按价格排序
        sortedList.sort((a, b) => direction === 'desc' ? b.currentPrice - a.currentPrice : a.currentPrice - b.currentPrice);
        break;
      case 'viewCount':
        // 按浏览量排序
        sortedList.sort((a, b) => direction === 'desc' ? b.viewCount - a.viewCount : a.viewCount - b.viewCount);
        break;
      case 'hot':
        // 按热门程度排序（综合热度）
        sortedList.sort((a, b) => {
          const scoreA = (a.learnCount * 0.6) + (a.viewCount * 0.4);
          const scoreB = (b.learnCount * 0.6) + (b.viewCount * 0.4);
          return direction === 'desc' ? scoreB - scoreA : scoreA - scoreB;
        });
        break;
      case 'comprehensive':
      default:
        // 综合排序（按热度、价格、时间综合评分）
        sortedList.sort((a, b) => {
          const scoreA = this.calculateComprehensiveScore(a);
          const scoreB = this.calculateComprehensiveScore(b);
          return direction === 'desc' ? scoreB - scoreA : scoreA - scoreB;
        });
        break;
    }
    
    this.setData({
      questionBankList: sortedList
    });
    
    console.log('题库列表已按', sortType, '排序，方向:', direction);
  },

  /**
   * 计算综合评分
   */
  calculateComprehensiveScore(item) {
    const learnScore = (item.learnCount || 0) * 0.4;  // 学习人数权重40%
    const viewScore = (item.viewCount || 0) * 0.3;    // 浏览量权重30%
    const priceScore = (100 - (item.currentPrice || 0)) * 0.2; // 价格权重20%（价格越低分数越高）
    const timeScore = (item.createTime ? new Date(item.createTime).getTime() : item.id) * 0.1; // 时间权重10%
    
    return learnScore + viewScore + priceScore + timeScore;
  },

  /**
   * 添加到购物车
   */
  onAddToCart(e) {
    const { id } = e.currentTarget.dataset;
    console.log('添加到购物车:', id);
    
    // 这里可以调用购物车API
    wx.showToast({
      title: '已添加到购物车',
      icon: 'success',
      duration: 1500
    });
  },

  /**
   * 题库卡片点击事件
   */
  onQuestionBankClick(e) {
    const { id } = e.currentTarget.dataset;
    const { subjectId } = this.data;
    console.log('点击题库:', id, 'subjectId:', subjectId);

    // 先检查用户是否已购买该题库
    this.checkUserPurchaseStatus(id, subjectId);
  },

  /**
   * 检查用户购买状态
   */
  checkUserPurchaseStatus(questionBankId, subjectId) {
    // 显示加载状态
    wx.showLoading({
      title: '检查权限...',
      mask: true
    });

    // 获取用户ID
    let userId = getUserId();
    
    // 如果无法获取用户ID，显示提示并跳转到商品页面
    if (!userId) {
      wx.hideLoading();
      console.warn('无法获取用户ID，默认跳转到商品页面');
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 2000
      });
      
      // 延迟跳转，让用户看到提示
      setTimeout(() => {
        this.navigateToQuestionBankGoods(questionBankId, subjectId);
      }, 2000);
      return;
    }

    // 构建请求参数
    const params = {
      userId: userId,
      questionBankId: questionBankId,
      subjectId: subjectId
    };

    console.log('检查用户购买状态，参数:', params);

    // 调用API检查用户购买状态
    http.get('/fk/question_bank/checkUserPurchase', params)
      .then(res => {
        wx.hideLoading();
        console.log('用户购买状态检查结果:', res);
        
        // 处理不同的API返回格式
        let hasAccess = false;
        
        // 如果返回的是直接的数据（boolean值）
        if (typeof res === 'boolean') {
          hasAccess = res;
          console.log('直接返回boolean值:', hasAccess);
        }
        // 如果返回的是包装后的数据 {code: 200, data: true/false, message: 'success'}
        else if (res && typeof res === 'object') {
          if (res.hasOwnProperty('data')) {
            hasAccess = Boolean(res.data);
            console.log('从data字段获取值:', res.data, '转换为:', hasAccess);
          } else if (res.hasOwnProperty('code') && res.code === 200) {
            // 如果只有code字段，检查是否成功
            hasAccess = true;
            console.log('从code字段判断成功:', res.code);
          } else {
            console.log('无法识别的返回格式:', res);
          }
        } else {
          console.log('返回数据格式异常:', res);
        }
        
        console.log('最终解析的访问权限:', hasAccess);
        
        // 根据解析结果决定跳转路径
        if (hasAccess) {
          // 用户已购买或有访问权限，显示确认对话框
          console.log('用户有访问权限，显示练习确认对话框');
          this.showPracticeConfirmDialog(questionBankId, subjectId);
        } else {
          // 用户未购买或无访问权限，跳转到题库商品页面
          console.log('用户无访问权限，跳转到题库商品页面');
          this.navigateToQuestionBankGoods(questionBankId, subjectId);
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('检查用户购买状态失败:', err);
        
        // 出错时默认跳转到题库商品页面
        wx.showToast({
          title: '权限检查失败，请重试',
          icon: 'none',
          duration: 2000
        });
        
        // 延迟跳转，让用户看到提示
        setTimeout(() => {
          this.navigateToQuestionBankGoods(questionBankId, subjectId);
        }, 2000);
      });
  },

  /**
   * 跳转到章节练习页面
   */
  navigateToChapterPractice(questionBankId, subjectId) {
    // 跳转到章节练习页面，传递题库ID和科目ID
    wx.navigateTo({
      url: `/index/pages/chapterPractice/chapterPractice?id=${questionBankId}&subjectId=${subjectId}`,
      fail: (err) => {
        console.error('跳转到章节练习页面失败:', err);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },

  /**
   * 跳转到题库商品页面
   */
  navigateToQuestionBankGoods(questionBankId, subjectId) {
    // 跳转到题库商品/详情页（分包 index）并传参
    wx.navigateTo({
      url: `/index/pages/questionBankGoods/questionBankGoods?id=${questionBankId}&subjectId=${subjectId}`,
      fail: (err) => {
        console.error('跳转到题库商品页面失败:', err);
        wx.showToast({
          title: '跳转失败，请重试',
          icon: 'none',
          duration: 2000
        });
      }
    });
  },

  /**
   * 显示练习确认对话框
   */
  showPracticeConfirmDialog(questionBankId, subjectId) {
    wx.showModal({
      title: '提示',
      content: '您已购买或有权限访问该题库，是否立即开始练习？',
      success: (res) => {
        if (res.confirm) {
          // 用户点击确定，跳转到章节练习页面
          this.navigateToChapterPractice(questionBankId, subjectId);
        }
        // 用户点击取消，不做任何操作，留在当前页面
      }
    });
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    console.log('下拉刷新');
    
    // 重新加载数据
    this.initPageData();
    
    wx.stopPullDownRefresh();
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    console.log('上拉触底');
    
    // 这里可以实现加载更多数据的功能
    // this.loadMoreData();
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '生物化学题库 - 免费学习资源',
      path: '/index/pages/freeQuizzes/freeQuizzes',
      imageUrl: '/images/share-cover.jpg'
    };
  }
})